import Vue from "vue";
import moment from "moment";
import { timestampFormatDate, dateChange } from "@/lib/FormatTime";
import { post } from "@/lib/Util";
import { sendMsg, getDB } from "@/lib/GetDB";

Vue.filter("currency", function(value) {
  if (!value) return "$0.00";

  const formattedValue = Number(value).toLocaleString();
  // 去掉小数点后为0的部分
  const parts = formattedValue.split(".");
  if (parts.length > 1 && Number(parts[1]) === 0) {
    return parts[0];
  }
  return formattedValue;
});

Vue.filter("fixTimeBack", (data, p1, p2) => {
  console.log(data, "datataaaaaaaaaaaaaa");
  if (data !== undefined && data != null && data !== "") {
    const val =
      data.substring(0, 4) +
      "-" +
      data.substring(4, 6) +
      "-" +
      data.substring(6, 8) +
      " " +
      data.substring(8, 10) +
      ":" +
      data.substring(10, 12) +
      ":" +
      data.substring(12);
    return moment(val).format(p1);
  } else {
    return "";
  }
});
Vue.filter("testFilter", (data, p1, p2) => {
  return data + "filter";
});
Vue.filter("cutZiFu", (data, p1, p2) => {
  console.log(typeof data, "typeof data");
  /* if (typeof data === 'string') {
    data = data.replace(new RegExp(p1, 'g'), '')
    data = data.replace(new RegExp(p2, 'g'), '')
  }*/
  return data;
});

Vue.filter("subTime2", data => {
  let d = "";
  if (data != null && data !== "") {
    d = data.substring(0, 19);
  }
  return d;
});
Vue.filter("subTime", data => {
  let d = "";
  if (data != null && data !== "") {
    d = data.substring(0, 24);
  }
  return d;
});
Vue.filter("timestampFormatDate", (data, p1, p2) => {
  const d = timestampFormatDate(data, p1);
  return d;
});
Vue.filter("dateChange", data => {
  const d = dateChange(data);
  return d;
});

Vue.filter("numToFiexed", (data, p1 = 2, p2) => {
  if (isNaN(Number(data))) {
    var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d.[0-9][0-9][0-9]$/;

    var isDate = reg.test(data);
    if (isDate) {
      return data.split(".")[0];
    }
    return data;
  } else {
    if (Number(data) % 1 === 0) {
      return data;
    }

    if (Math.abs(data) < 0.1) {
      return Number(data).toFixed(4);
    }
    return Number(data).toFixed(p1);
  }
});
Vue.filter("handleNum", data => {
  var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d.000$/;
  var isDate = reg.test(data);
  if (isDate) {
    return data.split(".")[0];
  }

  if (typeof data === "number" && (data + "").length >= 10) {
    data = Number(data.toFixed(6));
  }
  return data;
});
// 公共函数
Vue.use({
  install(Vue) {
    Vue.prototype.comsys = {
      // 表格序号
      tableRowIndex: function($index, currentPage, pageSize) {
        return (currentPage - 1) * pageSize + $index + 1;
      },
      // 表格斑马线效果
      tabRowClassName: function({ row, rowIndex }) {
        const index = rowIndex + 1;
        if (index % 2 === 0) {
          return "light-row";
        } else {
          return "dack-row";
        }
      },
      // 表格自适应宽度
      flexColumnWidth(str, tableData, flag, headData) {
        // str为该列的字段名(传字符串);tableData为该表格的数据源(传变量);
        // flag为可选值，可不传该参数,传参时可选'max'或'equal',默认为'max'
        // flag为'max'则设置列宽适配该列中最长的内容,flag为'equal'则设置列宽适配该列中第一行内容的长度。
        str = str + "";
        let columnContent = "";
        if (
          !tableData ||
          !tableData.length ||
          tableData.length === 0 ||
          tableData === undefined
        ) {
          return;
        }
        if (!str || !str.length || str.length === 0 || str === undefined) {
          return;
        }
        if (flag === "equal") {
          // 获取该列中第一个不为空的数据(内容)
          for (let i = 0; i < tableData.length; i++) {
            if (tableData[i][str].length > 0) {
              columnContent = tableData[i][str] + "";
              break;
            }
          }
        } else {
          // 获取该列中最长的数据(内容)
          let index = 0;
          for (let i = 0; i < tableData.length; i++) {
            if (tableData[i][str] === null) {
              // 当数据为空时跳过本次循环获取下一条数据长度
              continue;
            }
            const now_temp = tableData[i][str] + "";
            const max_temp = tableData[index][str] + "";
            if (now_temp.length > max_temp.length) {
              index = i;
            }
          }
          columnContent = tableData[index][str] + "";
        }
        // 以下分配的单位长度可根据实际需求进行调整
        let flexWidth = 20;
        if (columnContent !== undefined) {
          if (
            !isNaN(Number(columnContent)) &&
            columnContent.indexOf(".") > -1
          ) {
            if (columnContent.split(".")[1].length > 4) {
              columnContent = Number(columnContent).toFixed(2) + "";
            }
          }
          for (const char of columnContent) {
            if ((char >= "A" && char <= "Z") || (char >= "a" && char <= "z")) {
              // 如果是英文字符，为字符分配10个单位宽度
              flexWidth += 10;
            } else if (char >= "\u4e00" && char <= "\u9fa5") {
              // 如果是中文字符，为字符分配16个单位宽度
              flexWidth += 16;
            } else if (!isNaN(Number(char))) {
              // 如果是数字，为字符分配10个单位宽度
              flexWidth += 10;
            } else if (
              char === "" ||
              char === "." ||
              char === "-" ||
              char === ":" ||
              char === "/" ||
              char === "≤"
            ) {
              // 如果是特殊字符，为字符分配3个单位宽度
              flexWidth += 3;
            } else if (char === "—") {
              // 如果是特殊字符，为字符分配3个单位宽度
              flexWidth += 10;
            } else {
              // 其他种类字符，为字符分配10个单位宽度
              flexWidth += 10;
            }
          }
        }
        let flexWidthHeadData = 20;
        if (headData !== undefined) {
          for (const char of headData) {
            if ((char >= "A" && char <= "Z") || (char >= "a" && char <= "z")) {
              // 如果是英文字符，为字符分配10个单位宽度
              flexWidthHeadData += 10;
            } else if (char >= "\u4e00" && char <= "\u9fa5") {
              // 如果是中文字符，为字符分配16个单位宽度
              flexWidthHeadData += 15;
            } else if (!isNaN(Number(char))) {
              // 如果是中文字符，为字符分配16个单位宽度
              flexWidthHeadData += 8;
            } else if (
              char === "" ||
              char === "." ||
              char === "-" ||
              char === ":"
            ) {
              // 如果是中文字符，为字符分配16个单位宽度
              flexWidthHeadData += 3;
            } else {
              // 其他种类字符，为字符分配10个单位宽度
              flexWidthHeadData += 10;
            }
          }
        }
        if (flexWidthHeadData > flexWidth) {
          flexWidth = flexWidthHeadData;
        }
        if (flexWidth < 80) {
          // 设置最小宽度
          flexWidth = 70;
        }
        if (flexWidth > 500) {
          // 设置最大宽度
          flexWidth = 500;
        }
        return flexWidth + "px";
      },
      // 根据json数据，下载为json文件
      downJsonFile: function(jsonData, name) {
        var data = JSON.stringify(jsonData, null, "\t");
        if (data.length <= 2) {
          Vue.prototype.$message({
            message: "检测到json数据为空！",
            type: "warning"
          });
          return 0;
        }
        // encodeURIComponent解决中文乱码
        const uri = "data:text/csv;charset=utf-8," + encodeURIComponent(data);
        // 通过创建a标签实现
        const link = document.createElement("a");
        link.href = uri;
        // 对下载的文件命名
        link.download = name + ".json";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        return 1;
      },
      // html展示样式
      dataToHtml: function(data) {
        var html = "";
        try {
          if (data != null && data.length > 0) {
            var dataP = data.split("\n");
            dataP.map((item, index) => {
              html += "&nbsp;&nbsp;<li>" + item + "</li>";
            });
            if (html != "") {
              html = "<ol>" + html + "</ol>";
            }
          }
        } catch (e) {
          console.error(e);
        }
        return html;
      }
    };
  }
});
